﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://dtd.steinberg.de/VST-Remote-1.1" elementFormDefault="qualified" targetNamespace="http://dtd.steinberg.de/VST-Remote-1.1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="plugin">
    <xs:complexType>
      <xs:attribute name="classID" type="xs:string" use="required" />
      <xs:attribute name="name" type="xs:string" />
      <xs:attribute name="vendor" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="originator" type="xs:string" />
  <xs:element name="date" type="xs:string" />
  <xs:element name="comment" type="xs:string" />
  <xs:element name="name" type="xs:string" />
  <xs:element name="titleDisplay">
    <xs:complexType>
      <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element ref="name" />
      </xs:sequence>
      <xs:attribute name="parameterID" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="valueDisplay">
    <xs:complexType>
      <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element ref="name" />
      </xs:sequence>
      <xs:attribute name="parameterID" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="valueList">
    <xs:complexType>
      <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element ref="value" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="value" type="xs:string" />
  <xs:element name="segment">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" />
      </xs:sequence>
      <xs:attribute name="index" type="xs:NMTOKEN" use="required" />
      <xs:attribute default="0.0" name="order" type="xs:string" />
      <xs:attribute default="0.0;0.0" name="startPoint" type="xs:string" />
      <xs:attribute default="1.0;1.0" name="endPoint" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="segmentList">
    <xs:complexType>
      <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element ref="segment" />
      </xs:sequence>
      <xs:attribute name="length" type="xs:string" use="required" />
    </xs:complexType>
  </xs:element>
  <xs:element name="curve">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="segmentList" />
        <xs:element ref="valueList" />
      </xs:choice>
      <xs:attribute name="template" type="xs:string" />
      <xs:attribute name="type">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="step" />
            <xs:enumeration value="linear" />
            <xs:enumeration value="segment" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="layer">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="1" ref="titleDisplay" />
        <xs:element minOccurs="0" maxOccurs="1" ref="valueDisplay" />
        <xs:element minOccurs="0" maxOccurs="1" ref="curve" />
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" />
      <xs:attribute name="template" type="xs:string" />
      <!-- This was autogenerated by VS2010 when creating an xsd from an DTD.
          <xs:attribute default="knob|pressedKnob|switchKnob|switch|LED|fader|link|displayknob" name="type">
          Removed the default attr. -->
      <xs:attribute name="type">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="knob" />
            <xs:enumeration value="pressedKnob" />
            <xs:enumeration value="switchKnob" />
            <xs:enumeration value="switch" />
            <xs:enumeration value="LED" />
            <xs:enumeration value="fader" />
            <xs:enumeration value="link" />
            <xs:enumeration value="display" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="parameterID" type="xs:string" />
      <xs:attribute name="switchStyle">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="push" />
            <xs:enumeration value="latch" />
            <xs:enumeration value="pushInc" />
            <xs:enumeration value="pushIncLooped" />
            <xs:enumeration value="pushDec" />
            <xs:enumeration value="pushDecLooped" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="ledStyle">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="spread" />
            <xs:enumeration value="wrapRight" />
            <xs:enumeration value="wrapLeft" />
            <xs:enumeration value="boostCut" />
            <xs:enumeration value="singleDot" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="style">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="inverse" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="turnsPerFullRange" type="xs:string" />
      <xs:attribute name="function">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="PanLfeGain" />
            <xs:enumeration value="PanPosCenterX" />
            <xs:enumeration value="PanPosCenterY" />
            <xs:enumeration value="PanPosFrontLeftX" />
            <xs:enumeration value="PanPosFrontLeftY" />
            <xs:enumeration value="PanPosFrontRightX" />
            <xs:enumeration value="PanPosFrontRightY" />
            <xs:enumeration value="PanRotation" />
            <xs:enumeration value="PanLaw" />
            <xs:enumeration value="PanMirrorMode" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="linkedTo" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="cell">
    <xs:complexType>
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="layer" />
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="page">
    <xs:complexType>
      <xs:choice>
        <xs:element minOccurs="1" maxOccurs="unbounded" ref="cellGroup" />
        <xs:element minOccurs="1" maxOccurs="unbounded" ref="cell" />
      </xs:choice>
      <xs:attribute name="template" type="xs:string" />
      <xs:attribute name="name" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="representation">
    <xs:complexType>
      <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element ref="page" />
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" use="required" />
      <xs:attribute name="vendor" type="xs:string" use="required" />
      <xs:attribute name="host" type="xs:string" />
      <xs:attribute name="version" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="curveTemplate">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="segmentList" />
        <xs:element ref="valueList" />
      </xs:choice>
      <xs:attribute name="name" type="xs:string" use="required" />
      <xs:attribute name="type" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="step" />
            <xs:enumeration value="linear" />
            <xs:enumeration value="segment" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="cellGroupTemplate">
    <xs:complexType>
      <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element ref="cell" />
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" use="required" />
      <xs:attribute name="variables" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="cellGroup">
    <xs:complexType>
      <xs:attribute name="template" type="xs:string" use="required" />
      <xs:attribute name="variables" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="pageTemplate">
    <xs:complexType>
      <xs:choice minOccurs="1" maxOccurs="unbounded">
        <xs:element ref="cellGroup" />
        <xs:element ref="cell" />
      </xs:choice>
      <xs:attribute name="name" type="xs:string" use="required" />
      <xs:attribute name="variables" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="vstXML">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="plugin" />
        <xs:element ref="originator" />
        <xs:element ref="date" />
        <xs:element ref="comment" />
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="curveTemplate" />
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="cellGroupTemplate" />
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="pageTemplate" />
        <xs:element minOccurs="1" maxOccurs="unbounded" ref="representation" />
      </xs:sequence>
      <xs:attribute name="version" type="xs:string" use="required" />
    </xs:complexType>
  </xs:element>
</xs:schema>